const path = require('path')
const fs = require('fs')



// 判断文件类型，注意包含文件夹类型
const fileTypes = ['jpg','png','jpeg','webp',undefined]
const args = process.argv
let filePath;
let savePath;

let count = 0;

if(args.slice(2).length === 0 ) {
    console.log('Parameter folderPath is required!!')
} else {
    console.log(args)
    filePath = path.resolve(args[2]);
    savePath = path.join(filePath,'images');
    console.log("filePath:",filePath)
    console.log("savePath:",savePath)
    fs.mkdirSync(savePath,{recursive: true})
    fileDisplay(filePath)
}




/**
文件遍历
@param filePath 需要遍历的文件路径
**/

function fileDisplay(filePath) {
    try {
        //根据文件路径读取所有文件，返回文件列表,并对对文件列表重新排序
        const files = fs.readdirSync(filePath).sort((pre,next) => {
            return pre - next
        });
        
        console.log("files",filePath,files)

        //遍历读取到的文件列表
        files.forEach( (filename) => {
            if(fileTypes.indexOf(filename.split('.')[1]) === -1) return  // return => continue

            //获取当前文件的绝对路径
            const filedir = path.join(filePath, filename);
            //根据文件路径获取文件信息，返回一个fs.Stats对象
            try {
                const stats = fs.statSync(filedir)
                const isFile = stats.isFile(); //是文件
                const isDir = stats.isDirectory(); //是文件夹
                if (isFile) {
                    rename(filedir,savePath)
                }
                if (isDir && filename !== 'images' && filename !== 'zip') {
                    //递归，如果是文件夹，就继续遍历该文件夹下面的文件,注意忽略images文件夹
                    fileDisplay(filedir); 
                }
            } catch (error) {
                console.warn('获取文件stats失败',error);
            }
        });
    } catch (error) {
        console.warn(error)
    }
}

/**
 * 文件重命名
 * @param {*} oldFilePath  旧文件完整地址包含文件名 
 * @param {*} newPath      新文件输出地址
 * @param {*} newName      重命名名称
 */
function rename (oldFilePath, newPath) {
    count++;
    // 文件名前补 '0'
    const newName = `${String(count).padStart(5,'0')}.jpg`
    // 新目录/文件的完整路径及名；如果新路径与原路径相同，而只文件名不同，则是重命名
    const newFilePath = path.join(newPath,newName)
    try {
        // 为了保证文件顺序
        fs.renameSync(oldFilePath, newFilePath)
        // console.log('重命名成功',oldFilePath,'---->',newName);
    } catch (error) {
        console.error(err);
    }
}